1
A Investigação de Desempenho
DSAI2202Lab 8: Composing Data Operations

A equipa de apoio académico precisa de uma lista de inscrições ativas cujo desempenho recente registou uma quebra. Compare cada estudante com o seu próprio desempenho anterior no mesmo curso.

Definir as Regras

  1. Utilize dois períodos: anterior e recente. Cada um tem duas avaliações com o mesmo peso.
  2. Exija pelo menos duas pontuações não nulas em cada período antes de comparar as médias.
  3. Calcule decline_points = earlier_avg - recent_avg.
  4. Uma quebra de pelo menos 15 pontos significa Rever. Caso contrário, uma inscrição elegível tem Sem alerta.
  5. Mantenha Dados insuficientes em separado. Um zero é uma pontuação válida; um registo NULL ou em falta não é um zero.

Prepare a Sua Base de Dados

Abra o ficheiro fornecido lab8_setup.sql da pasta do assistente DSAI2202/lab8/ no pgAdmin e execute o ficheiro completo. Utilize novamente a configuração de ligação à direita sempre que abrir uma nova ligação.

A configuração também fornece performance_comparison, uma consulta guardada denominada view. Irá apoiar exercícios posteriores; não é uma tabela adicional de resultados de avaliação armazenados.

✍️ Inspecione Antes de Calcular
Inspecione E01, E07, E08, E09 e E24. Decida quais têm pontuações suficientes em ambos os períodos. Explique por que razão os zeros de E24 fornecem evidências mais fortes do que os valores NULL de E08.
Definir esquema
SET search_path TO lab8;
Verificar contagens
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
Inspecionar evidências
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;